// https://transform.tools/json-to-typescript  json对象转ts类型
import axios from 'axios'

export interface IData<T> {
  code: number
  msg: string
  data: T
}

// 多实例
const ins = axios.create()

// 请求拦截器
ins.interceptors.request.use((config) => {
  config.timeout = 10000
  config.baseURL = ''
  return config
})

// 响应拦截器
ins.interceptors.response.use(
  (res: any) => {
    return res.data
  },
  (err) => Promise.reject(err)
)

/**
 * get请求
 * @param url 请求的url地址
 * @param config 额外请求头信息
 * @returns Promise<T>
 */
export const get = <T>(url: string, config = {}) => {
  return ins.get<any, IData<T>>(url, config)
}

/**
 * delete请求
 * @param url 请求的url地址
 * @param config 额外请求头信息
 * @returns Promise<T>
 */
export const del = <T>(url: string, config = {}) => {
  return ins.delete<any, IData<T>>(url, config)
}

/**
 * post请求
 * @param url 请求的url地址
 * @param data 请求体数据
 * @param config 额外请求头数据
 * @returns Promise<T>
 */
export const post = <T>(url: string, data = {}, config = {}) => {
  return ins.post<any, IData<T>>(url, data, config)
}

/**
 * put请求
 * @param url 请求的url地址
 * @param data 请求体数据
 * @param config 额外请求头数据
 * @returns Promise<T>
 */
export const put = <T>(url: string, data = {}, config = {}) => {
  return ins.put<any, IData<T>>(url, data, config)
}
